package com.ldx.common.handle;

import com.ldx.common.enums.BizStatusEnum;
import com.ldx.common.utils.R;
import com.ldx.common.utils.ThrowableUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.Objects;

@Slf4j
@RestControllerAdvice(basePackages = "com.ldx")
public class GlobalHandleExceptionAdvice {
    /**
     * 统一处理数据校验异常
     *
     * @param e
     * @return
     */
    @ExceptionHandler(value = MethodArgumentNotValidException.class)
    public R handleMethodArgumentNotValidException(MethodArgumentNotValidException e) {
        log.error(ThrowableUtil.getStackTrace(e));
        String[] str = Objects.requireNonNull(e.getBindingResult().getAllErrors().get(0).getCodes())[1].split("\\.");
        String message = e.getBindingResult().getAllErrors().get(0).getDefaultMessage();
        String msg = "不能为空";
        if (msg.equals(message)) {
            message = str[1] + ":" + message;
        }
        return R.error(BizStatusEnum.VALID_EXECPTION.getCode(), BizStatusEnum.VALID_EXECPTION.getMsg());
    }

    @ExceptionHandler(Throwable.class)
    public R GlobalException(Exception e) {
        // 打印堆栈信息
        log.error(ThrowableUtil.getStackTrace(e));
        return R.error(BizStatusEnum.UNKNOW_EXECPTION.getCode(), BizStatusEnum.UNKNOW_EXECPTION.getMsg());
    }



}
